"""
数学工具库

这个模块提供各种数学运算功能。
"""


def gcd(a, b):
    """
    计算最大公约数

    >>> gcd(48, 18)
    6
    >>> gcd(17, 13)
    1
    >>> gcd(0, 5)
    5
    """
    while b:
        a, b = b, a % b
    return a


def lcm(a, b):
    """
    计算最小公倍数

    >>> lcm(12, 18)
    36
    >>> lcm(5, 7)
    35
    """
    return abs(a * b) // gcd(a, b) if a and b else 0


def fibonacci(n):
    """
    生成斐波那契数列的第n项

    >>> fibonacci(0)
    0
    >>> fibonacci(1)
    1
    >>> fibonacci(5)
    5
    >>> fibonacci(10)
    55
    """
    if n <= 1:
        return n
    a, b = 0, 1
    for _ in range(2, n + 1):
        a, b = b, a + b
    return b


def is_prime(n):
    """
    检查一个数是否为质数

    >>> is_prime(2)
    True
    >>> is_prime(4)
    False
    >>> is_prime(17)
    True
    >>> is_prime(1)
    False
    """
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True


if __name__ == "__main__":
    import doctest

    # 运行测试，显示详细信息
    doctest.testmod(verbose=True)